package Tree_09.ArrayBinaryTree_02;

/*
 * @Author 罗
 * @date 2020/3/20 - 11:21 下午
 * 顺序存储二叉树的特点:
 *
 *    (1)顺序二叉树通常只考虑完全二叉树
 *    (2)第n个元素的左子节点为  2 * n + 1
 *    (3)第n个元素的右子节点为  2 * n + 2
 *    (4)第n个元素的父节点为  (n-1) / 2
 *
 *    n : 表示二叉树中的第几个元素，对应数组下标，所以都是从0开始编号
 *
 */

public class ArrayBinaryTree<T> {

    private T[] array;

    /**
     * 前序
     * @param index
     */
    public void prefix(int index) {
        if (index >= array.length) {
            return;
        }
        System.out.print(array[index] + "\t");
        if (array[index] != null) {
            prefix(2 * index + 1);
            prefix(2 * index + 2);
        }

    }

    /**
     * 中序
     *
     * @param index
     */
    public void infixList(int index) {

        if (index >= array.length) {
            return;
        }
        if (array[index] != null) {
            infixList(2 * index + 1);
        }
        System.out.print(array[index] + "\t");
        if (array[index] != null) {
            infixList(2 * index + 2);
        }
    }

    /**
     * 后序
     * @param index
     */
    public void suffix(int index){
        if(index >= array.length){
            return;
        }
        if(array[index]!= null){
            suffix(2*index+1);
            suffix(2*index+2);
        }
        System.out.print(array[index]+"\t");
    }

    public ArrayBinaryTree(T[] array) {
        this.array = array;
    }
}
